# 类的继承
class A:
    def a(self):
        print("调用A类a方法")


class B:
    def a(self):
        print("调用B类a方法")


class C(B):  # 单继承
    def a(self):  # 重写B父类的a方法
        print("调用C类a方法")

    def c(self):
        print("调用C类c方法")


class D(A, B):  # 支持多继承，若两个类有相同方法，按小括号顺序取
    def d(self):
        print("调用D类d方法")


class E(C):  # 支持多重继承
    def e(self):
        print("调用E类e方法")


if __name__ == "__main__":
    cc = C()
    # print(cc.a())
    dd = D()
    # print(dd.a())
    ee = E()
    print(cc.a())
    print(issubclass(D, A))  # 判断一个类是不是另一个类的子孙类
    print(isinstance(ee, B))  # 判断一个实例对象是不是某个类/子孙类的实例


"""
    issubclass(class, classinfo) , 在 Python 中，issubclass(class, classinfo) 是一个内置函数，用于判断一个类是否是另一个类（或类元组）的子类。

    参数说明：
        class：要检查的类（必须是类对象，不能是实例）。
        classinfo：可以是：
            一个类
            一个类组成的元组（tuple）
            如果是元组，只要 class 是其中任意一个的子类，就返回 True
            返回值：
            True：如果 class 是 classinfo 的子类（或就是它本身）
            False：否则
            
        ✅ 注意：一个类被认为是它自己的子类，所以 issubclass(A, A) 返回 True。 
"""

"""
    isinstance(object, classinfo) , 在 Python 中，isinstance(object, classinfo) 是一个内置函数，用于判断一个对象是否是指定类（或类元组）的实例。 它是 Python 面向对象编程中进行类型检查最常用、最安全的方式。
    
    参数说明：
        object：要检查的对象（可以是任何实例）。
        classinfo：可以是：
            一个类（如 int, str, MyClass）
            一个类组成的元组（如 (int, str, list)）
            如果是元组，只要对象是其中任意一个类型的实例，就返回 True
            返回值：
            True：对象是指定类型（或其子类）的实例
            False：否则
            
        ✅ 支持继承关系 —— 如果对象是子类的实例，对父类的 isinstance 检查也会返回 True。 
"""